package com.kotlin.flong.flow

import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.runBlocking

/**
 * @Author:liangjl
 * @Date: 2020/7/9-22:23
 * @Eamil:jilongliang@sina.com
 * @Description:
 * 只有当调用了Flow对象上的终止操作（如：collect）之后，Flow才会真正执行
 * 当我们调用了myMethod方法后，它实际上是立刻返回的，并不会去执行其中的代码
 */
private fun myMethod(): Flow<Int> = flow {
    for (i in 1..3) {
        delay(100L)
        emit(i)
    }
}

fun main() = runBlocking<Unit> {
    println("this is main start")
    var myMethod = myMethod()

    myMethod.collect { println(it) }
    println("this is main end ")

    myMethod.collect { println(it) }
}